package com.itaming.lycheeframework.support.tree;

import com.itaming.lycheeframework.support.utils.CollectionUtil;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
 * 树节点接口
 *
 * @author A.Ming
 */
public interface TreeNode<T extends TreeNode<T, S>, S extends Serializable> extends Serializable {

    /**
     * ID
     */
    S getId();

    /**
     * 父级ID
     */
    S getParentId();

    /**
     * 子节点列表
     */
    List<T> getChildren();

    /**
     * 设置子节点列表
     *
     * @param children 子节点列表
     */
    void setChildren(List<T> children);

    /**
     * 添加子节点
     *
     * @param node 节点
     */
    default void addChildren(T node) {
        if (getChildren() == null) {
            setChildren(new ArrayList<>());
        }

        getChildren().add(node);
    }

    /**
     * 是否有子节点
     */
    default Boolean getHasChildren() {
        return CollectionUtil.isNotEmpty(getChildren());
    }

}
